#ifndef CONFIGURATION_H
#define CONFIGURATION_H

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <map>
#include <set>

using std::string;
using std::map;
using std::set;

class Configuration
{
public:
    // 获取单例（懒汉模式）
    static Configuration& getInstance(const string& filepath)
    {
        // try {
        //     static Configuration instance(filepath);
        // } catch (const std::exception& e) {
        //     // 处理构造函数抛出的异常
        //     std::cout << "构造函数发生错误: " << e.what() << std::endl;
        // }
        static Configuration instance(filepath);
        return instance;
    }
    // Configuration& config = Configuration::getInstance("./");

    // 存放配置文件
    map<string, string>& getConfigMap()
    {
        return _configMap;
    }

    // 停用词词集
    set<string>& getStopWordList()
    {
        return _stopWordList;
    }

private:
    Configuration(const string& filepath)
    : _filepath(filepath)
    {
        std::ifstream configFile(_filepath);
        if (configFile.is_open()) {
            string line;
            while (std::getline(configFile, line)) {
                std::istringstream iss(line);
                string key, value;
                if (iss >> key >> value) {
                    _configMap[key] = value;
                }
            }

            configFile.close();
        } else {
            std::cout << "Failed to open config file." << std::endl;
            throw std::runtime_error("配置文件处理出错");
        }
    }

    ~Configuration()
    {

    }

private:
    string _filepath; // 配置文件路径
    map<string, string> _configMap; // 配置文件内容
    set<string> _stopWordList; // 停用词词集
};



#endif
